<child>
<object class="GtkMenuItem" id="menuitem1">
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="label" translatable="yes">_File</property>
<property name="use_underline">1</property>
<child type="submenu">
<object class="GtkMenuItem" id="menuitem101">
<property name="label" translatable="yes">_New</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<object class="GtkMenuItem" id="menuitem102">
<property name="label" translatable="yes">_Open</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<object class="GtkMenuItem" id="menuitem103">
<property name="label" translatable="yes">_Save</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<object class="GtkMenuItem" id="menuitem104">
<property name="label" translatable="yes">Save _As</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separatormenuitem1">
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="quitmenuitem">
<property name="label" translatable="yes">_Quit</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
<property name="action_name">app.quit</property>
</object>
<child>
<object class="GtkMenuItem" id="menuitem2">
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="label" translatable="yes">_Edit</property>
<property name="use_underline">1</property>
<child type="submenu">
<property name="label" translatable="yes">Cu_t</property>
<property name="visible">1</property>
<property name="can_focus">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<object class="GtkMenuItem" id="menuitem107">
<property name="label" translatable="yes">_Copy</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<object class="GtkMenuItem" id="menuitem108">
<property name="label" translatable="yes">_Paste</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<object class="GtkMenuItem" id="deletemenuitem">
<property name="label" translatable="yes">_Delete</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
<property name="action_name">win.delete</property>
</object>
<property name="label">_Check</property>
<property name="active">1</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<property name="active">1</property>
<property name="visible">1</property>
<property name="sensitive">0</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<property name="label">_Check</property>
<property name="visible">1</property>
<property name="inconsistent">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<object class="GtkCheckMenuItem" id="checkmenuitem4">
<property name="label">_Check</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<property name="label">_Check</property>
<property name="visible">1</property>
<property name="sensitive">0</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<property name="visible">1</property>
<property name="inconsistent">1</property>
<property name="sensitive">0</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<property name="label">_Radio</property>
<property name="active">1</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<property name="active">1</property>
<property name="visible">1</property>
<property name="sensitive">0</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<property name="label">_Radio</property>
<property name="visible">1</property>
<property name="inconsistent">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<object class="GtkRadioMenuItem" id="radiomenuitem4">
<property name="label">_Radio</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<property name="label">_Radio</property>
<property name="visible">1</property>
<property name="sensitive">0</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<property name="visible">1</property>
<property name="inconsistent">1</property>
<property name="sensitive">0</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="menuitem3">
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="label" translatable="yes">_View</property>
<property name="use_underline">1</property>
<child type="submenu">
<object class="GtkCheckMenuItem" id="darkmenuitem">
<property name="label">_Dark theme</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
<property name="action_name">win.dark</property>
</object>
<property name="label">_Toolbar</property>
<property name="visible">1</property>
<property name="active">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
<property name="action_name">win.toolbar</property>
</object>
<property name="label">_Statusbar</property>
<property name="visible">1</property>
<property name="active">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
<property name="action_name">win.statusbar</property>
</object>
<object class="GtkMenuItem" id="bgmenuitem">
<property name="label">_Select Background</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
<property name="action_name">win.background</property>
</object>
<child>
<object class="GtkMenuItem" id="menuitem4">
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="label" translatable="yes">_Help</property>
<property name="use_underline">1</property>
<child type="submenu">
<object class="GtkMenuItem" id="aboutmenuitem">
<property name="label" translatable="yes">_About</property>
<property name="visible">1</property>
- <property name="use_action_appearance">0</property>
<property name="use_underline">1</property>
<property name="action_name">app.about</property>
</object>
#include "gtkcheckmenuitemprivate.h"
#include "gtkmenuitemprivate.h"
#include "gtkaccellabel.h"
-#include "deprecated/gtkactivatable.h"
#include "deprecated/gtktoggleaction.h"
#include "gtkmarshalers.h"
#include "gtkprivate.h"
static void gtk_check_menu_item_direction_changed (GtkWidget *widget,
GtkTextDirection previous_dir);
-static void gtk_check_menu_item_activatable_interface_init (GtkActivatableIface *iface);
-static void gtk_check_menu_item_update (GtkActivatable *activatable,
- GtkAction *action,
- const gchar *property_name);
-static void gtk_check_menu_item_sync_action_properties (GtkActivatable *activatable,
- GtkAction *action);
-
-static GtkActivatableIface *parent_activatable_iface;
static guint check_menu_item_signals[LAST_SIGNAL] = { 0 };
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
G_DEFINE_TYPE_WITH_CODE (GtkCheckMenuItem, gtk_check_menu_item, GTK_TYPE_MENU_ITEM,
- G_ADD_PRIVATE (GtkCheckMenuItem)
- G_IMPLEMENT_INTERFACE (GTK_TYPE_ACTIVATABLE,
- gtk_check_menu_item_activatable_interface_init))
-G_GNUC_END_IGNORE_DEPRECATIONS;
+ G_ADD_PRIVATE (GtkCheckMenuItem))
static void
gtk_check_menu_item_size_allocate (GtkWidget *widget,
gtk_widget_class_set_css_name (widget_class, "menuitem");
}
-static void
-gtk_check_menu_item_activatable_interface_init (GtkActivatableIface *iface)
-{
- parent_activatable_iface = g_type_interface_peek_parent (iface);
- iface->update = gtk_check_menu_item_update;
- iface->sync_action_properties = gtk_check_menu_item_sync_action_properties;
-}
-
-static void
-gtk_check_menu_item_update (GtkActivatable *activatable,
- GtkAction *action,
- const gchar *property_name)
-{
- GtkCheckMenuItem *check_menu_item;
- gboolean use_action_appearance;
-
- check_menu_item = GTK_CHECK_MENU_ITEM (activatable);
-
- parent_activatable_iface->update (activatable, action, property_name);
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-
- if (strcmp (property_name, "active") == 0)
- {
- gtk_action_block_activate (action);
- gtk_check_menu_item_set_active (check_menu_item, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
- gtk_action_unblock_activate (action);
- }
-
- use_action_appearance = gtk_activatable_get_use_action_appearance (activatable);
- G_GNUC_END_IGNORE_DEPRECATIONS;
-
- if (!use_action_appearance)
- return;
-
- if (strcmp (property_name, "draw-as-radio") == 0)
- {
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- gtk_check_menu_item_set_draw_as_radio (check_menu_item,
- gtk_toggle_action_get_draw_as_radio (GTK_TOGGLE_ACTION (action)));
- G_GNUC_END_IGNORE_DEPRECATIONS;
- }
-}
-
-static void
-gtk_check_menu_item_sync_action_properties (GtkActivatable *activatable,
- GtkAction *action)
-{
- GtkCheckMenuItem *check_menu_item;
- gboolean use_action_appearance;
- gboolean is_toggle_action;
-
- check_menu_item = GTK_CHECK_MENU_ITEM (activatable);
-
- parent_activatable_iface->sync_action_properties (activatable, action);
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- is_toggle_action = GTK_IS_TOGGLE_ACTION (action);
- G_GNUC_END_IGNORE_DEPRECATIONS;
-
- if (!is_toggle_action)
- return;
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- gtk_action_block_activate (action);
-
- gtk_check_menu_item_set_active (check_menu_item, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
- gtk_action_unblock_activate (action);
- use_action_appearance = gtk_activatable_get_use_action_appearance (activatable);
- G_GNUC_END_IGNORE_DEPRECATIONS;
-
- if (!use_action_appearance)
- return;
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- gtk_check_menu_item_set_draw_as_radio (check_menu_item,
- gtk_toggle_action_get_draw_as_radio (GTK_TOGGLE_ACTION (action)));
- G_GNUC_END_IGNORE_DEPRECATIONS;
-}
-
/**
* gtk_check_menu_item_new:
*
#include "gtkseparatormenuitem.h"
#include "gtkprivate.h"
#include "gtkbuildable.h"
-#include "deprecated/gtkactivatable.h"
#include "gtkwidgetprivate.h"
#include "gtkintl.h"
#include "gtksettings.h"
LAST_PROP,
- /* activatable properties */
- PROP_ACTIVATABLE_RELATED_ACTION = LAST_PROP,
- PROP_ACTIVATABLE_USE_ACTION_APPEARANCE,
-
PROP_ACTION_NAME,
PROP_ACTION_TARGET
};
gpointer user_data);
static void gtk_menu_item_actionable_interface_init (GtkActionableInterface *iface);
-static void gtk_menu_item_activatable_interface_init (GtkActivatableIface *iface);
-static void gtk_menu_item_update (GtkActivatable *activatable,
- GtkAction *action,
- const gchar *property_name);
-static void gtk_menu_item_sync_action_properties (GtkActivatable *activatable,
- GtkAction *action);
-static void gtk_menu_item_set_related_action (GtkMenuItem *menu_item,
- GtkAction *action);
-static void gtk_menu_item_set_use_action_appearance (GtkMenuItem *menu_item,
- gboolean use_appearance);
static guint menu_item_signals[LAST_SIGNAL] = { 0 };
static GParamSpec *menu_item_props[LAST_PROP];
static GtkBuildableIface *parent_buildable_iface;
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
G_DEFINE_TYPE_WITH_CODE (GtkMenuItem, gtk_menu_item, GTK_TYPE_BIN,
G_ADD_PRIVATE (GtkMenuItem)
G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
gtk_menu_item_buildable_interface_init)
- G_IMPLEMENT_INTERFACE (GTK_TYPE_ACTIVATABLE,
- gtk_menu_item_activatable_interface_init)
G_IMPLEMENT_INTERFACE (GTK_TYPE_ACTIONABLE,
gtk_menu_item_actionable_interface_init))
-G_GNUC_END_IGNORE_DEPRECATIONS;
static void
gtk_menu_item_set_action_name (GtkActionable *actionable,
g_object_class_install_properties (gobject_class, LAST_PROP, menu_item_props);
- g_object_class_override_property (gobject_class, PROP_ACTIVATABLE_RELATED_ACTION, "related-action");
- g_object_class_override_property (gobject_class, PROP_ACTIVATABLE_USE_ACTION_APPEARANCE, "use-action-appearance");
-
g_object_class_override_property (gobject_class, PROP_ACTION_NAME, "action-name");
g_object_class_override_property (gobject_class, PROP_ACTION_TARGET, "action-target");
gtk_widget_set_has_window (GTK_WIDGET (menu_item), FALSE);
- priv->action = NULL;
- priv->use_action_appearance = TRUE;
-
priv->submenu = NULL;
priv->toggle_size = 0;
priv->accelerator_width = 0;
else
priv->submenu_direction = GTK_DIRECTION_RIGHT;
priv->submenu_placement = GTK_TOP_BOTTOM;
- priv->use_action_appearance = TRUE;
priv->timer = 0;
- priv->action = NULL;
widget_node = gtk_widget_get_css_node (GTK_WIDGET (menu_item));
priv->gadget = gtk_css_custom_gadget_new_for_node (widget_node,
g_clear_object (&priv->action_helper);
- if (priv->action)
- {
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- gtk_action_disconnect_accelerator (priv->action);
- gtk_activatable_do_set_related_action (GTK_ACTIVATABLE (menu_item), NULL);
- G_GNUC_END_IGNORE_DEPRECATIONS;
- priv->action = NULL;
- }
-
g_clear_object (&priv->arrow_gadget);
g_clear_object (&priv->gadget);
case PROP_USE_UNDERLINE:
gtk_menu_item_set_use_underline (menu_item, g_value_get_boolean (value));
break;
- case PROP_ACTIVATABLE_RELATED_ACTION:
- gtk_menu_item_set_related_action (menu_item, g_value_get_object (value));
- break;
- case PROP_ACTIVATABLE_USE_ACTION_APPEARANCE:
- gtk_menu_item_set_use_action_appearance (menu_item, g_value_get_boolean (value));
- break;
case PROP_ACTION_NAME:
gtk_menu_item_set_action_name (GTK_ACTIONABLE (menu_item), g_value_get_string (value));
break;
case PROP_USE_UNDERLINE:
g_value_set_boolean (value, gtk_menu_item_get_use_underline (menu_item));
break;
- case PROP_ACTIVATABLE_RELATED_ACTION:
- g_value_set_object (value, priv->action);
- break;
- case PROP_ACTIVATABLE_USE_ACTION_APPEARANCE:
- g_value_set_boolean (value, priv->use_action_appearance);
- break;
case PROP_ACTION_NAME:
g_value_set_string (value, gtk_action_helper_get_action_name (priv->action_helper));
break;
parent_buildable_iface->custom_finished (buildable, builder, child, tagname, user_data);
}
-
-static void
-gtk_menu_item_activatable_interface_init (GtkActivatableIface *iface)
-{
- iface->update = gtk_menu_item_update;
- iface->sync_action_properties = gtk_menu_item_sync_action_properties;
-}
-
-static void
-activatable_update_label (GtkMenuItem *menu_item, GtkAction *action)
-{
- GtkWidget *child;
-
- child = gtk_bin_get_child (GTK_BIN (menu_item));
-
- if (GTK_IS_LABEL (child))
- {
- const gchar *label;
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- label = gtk_action_get_label (action);
- G_GNUC_END_IGNORE_DEPRECATIONS;
- gtk_menu_item_set_label (menu_item, label);
- }
-}
-
-/*
- * gtk_menu_is_empty:
- * @menu: (allow-none): a #GtkMenu or %NULL
- *
- * Determines whether @menu is empty. A menu is considered empty if it
- * the only visible children are “filler” menu items which were
- * inserted to mark the menu as empty.
- *
- * This function is used by #GtkAction.
- *
- * Returns: whether @menu is empty.
- **/
-static gboolean
-gtk_menu_is_empty (GtkWidget *menu)
-{
- GList *children, *cur;
- gboolean result = TRUE;
-
- g_return_val_if_fail (menu == NULL || GTK_IS_MENU (menu), TRUE);
-
- if (!menu)
- return FALSE;
-
- children = gtk_container_get_children (GTK_CONTAINER (menu));
-
- cur = children;
- while (cur)
- {
- if (gtk_widget_get_visible (cur->data))
- {
- if (!g_object_get_data (cur->data, "gtk-empty-menu-item"))
- {
- result = FALSE;
- break;
- }
- }
- cur = cur->next;
- }
- g_list_free (children);
-
- return result;
-}
-
-
-static void
-gtk_menu_item_update (GtkActivatable *activatable,
- GtkAction *action,
- const gchar *property_name)
-{
- GtkMenuItem *menu_item = GTK_MENU_ITEM (activatable);
- GtkMenuItemPrivate *priv = menu_item->priv;
-
- if (strcmp (property_name, "visible") == 0)
- {
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- _gtk_action_sync_menu_visible (action, GTK_WIDGET (menu_item),
- gtk_menu_is_empty (gtk_menu_item_get_submenu (menu_item)));
- G_GNUC_END_IGNORE_DEPRECATIONS;
- }
- else if (strcmp (property_name, "sensitive") == 0)
- {
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- gtk_widget_set_sensitive (GTK_WIDGET (menu_item), gtk_action_is_sensitive (action));
- G_GNUC_END_IGNORE_DEPRECATIONS;
- }
- else if (priv->use_action_appearance)
- {
- if (strcmp (property_name, "label") == 0)
- activatable_update_label (menu_item, action);
- }
-}
-
-static void
-gtk_menu_item_sync_action_properties (GtkActivatable *activatable,
- GtkAction *action)
-{
- GtkMenuItem *menu_item = GTK_MENU_ITEM (activatable);
- GtkMenuItemPrivate *priv = menu_item->priv;
- GtkWidget *label;
-
- if (!priv->use_action_appearance || !action)
- {
- label = gtk_bin_get_child (GTK_BIN (menu_item));
-
- if (GTK_IS_ACCEL_LABEL (label))
- gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), GTK_WIDGET (menu_item));
- }
-
- if (!action)
- return;
-
- _gtk_action_sync_menu_visible (action, GTK_WIDGET (menu_item),
- gtk_menu_is_empty (gtk_menu_item_get_submenu (menu_item)));
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- gtk_widget_set_sensitive (GTK_WIDGET (menu_item), gtk_action_is_sensitive (action));
- G_GNUC_END_IGNORE_DEPRECATIONS;
-
- if (priv->use_action_appearance)
- {
- label = gtk_bin_get_child (GTK_BIN (menu_item));
-
- /* make sure label is a label, deleting it otherwise */
- if (label && !GTK_IS_LABEL (label))
- {
- gtk_container_remove (GTK_CONTAINER (menu_item), label);
- label = NULL;
- }
- /* Make sure that menu_item has a label and that any
- * accelerators are set */
- gtk_menu_item_ensure_label (menu_item);
- gtk_menu_item_set_use_underline (menu_item, TRUE);
- /* Make label point to the menu_item's label */
- label = gtk_bin_get_child (GTK_BIN (menu_item));
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- if (GTK_IS_ACCEL_LABEL (label) && gtk_action_get_accel_path (action))
- {
- gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), NULL);
- gtk_accel_label_set_accel_closure (GTK_ACCEL_LABEL (label),
- gtk_action_get_accel_closure (action));
- }
- G_GNUC_END_IGNORE_DEPRECATIONS;
-
- activatable_update_label (menu_item, action);
- }
-}
-
-static void
-gtk_menu_item_set_related_action (GtkMenuItem *menu_item,
- GtkAction *action)
-{
- GtkMenuItemPrivate *priv = menu_item->priv;
-
- if (priv->action == action)
- return;
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-
- if (priv->action)
- {
- gtk_action_disconnect_accelerator (priv->action);
- }
-
- if (action)
- {
- const gchar *accel_path;
-
- accel_path = gtk_action_get_accel_path (action);
- if (accel_path)
- {
- gtk_action_connect_accelerator (action);
- gtk_menu_item_set_accel_path (menu_item, accel_path);
- }
- }
-
- gtk_activatable_do_set_related_action (GTK_ACTIVATABLE (menu_item), action);
-
- G_GNUC_END_IGNORE_DEPRECATIONS;
-
- priv->action = action;
-}
-
-static void
-gtk_menu_item_set_use_action_appearance (GtkMenuItem *menu_item,
- gboolean use_appearance)
-{
- GtkMenuItemPrivate *priv = menu_item->priv;
-
- if (priv->use_action_appearance != use_appearance)
- {
- priv->use_action_appearance = use_appearance;
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- gtk_activatable_sync_action_properties (GTK_ACTIVATABLE (menu_item), priv->action);
- G_GNUC_END_IGNORE_DEPRECATIONS;
- }
-}
-
static void
update_node_classes (GtkMenuItem *menu_item)
{
{
GtkMenuItemPrivate *priv = menu_item->priv;
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
-
if (priv->action_helper)
gtk_action_helper_activate (priv->action_helper);
-
- if (priv->action)
- gtk_action_activate (priv->action);
-
- G_GNUC_END_IGNORE_DEPRECATIONS;
}
gchar *accel_path;
- GtkAction *action;
GtkActionHelper *action_helper;
GtkCssGadget *gadget;
guint submenu_direction : 1;
guint right_justify : 1;
guint from_menubar : 1;
- guint use_action_appearance : 1;
guint reserve_indicator : 1;
};